home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / simplejson / scanner.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  2KB  |  72 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import re
  5. from re import VERBOSE, MULTILINE, DOTALL
  6. import sre_parse
  7. import sre_compile
  8. import sre_constants
  9. from sre_constants import BRANCH, SUBPATTERN
  10. __all__ = [
  11.     'make_scanner',
  12.     'pattern']
  13. FLAGS = VERBOSE | MULTILINE | DOTALL
  14.  
  15. def make_scanner(lexicon, flags = FLAGS):
  16.     actions = [
  17.         None]
  18.     s = sre_parse.Pattern()
  19.     s.flags = flags
  20.     charpatterns = { }
  21.     p = []
  22.     idx = 0
  23.     for token in lexicon:
  24.         if token.pattern in ('\\[', '{', '"'):
  25.             charpatterns[token.pattern[-1]] = token
  26.         
  27.         idx += 1
  28.         phrase = token.pattern
  29.         
  30.         try:
  31.             subpattern = sre_parse.SubPattern(s, [
  32.                 (SUBPATTERN, (idx, sre_parse.parse(phrase, flags)))])
  33.         except sre_constants.error:
  34.             raise 
  35.  
  36.         p.append(subpattern)
  37.         actions.append(token)
  38.     
  39.     s.groups = len(p) + 1
  40.     p = sre_parse.SubPattern(s, [
  41.         (BRANCH, (None, p))])
  42.     scanner = sre_compile.compile(p).scanner
  43.     
  44.     def _scan_once(string, idx = None, context = (None, 0, None)):
  45.         
  46.         try:
  47.             action = charpatterns[string[idx]]
  48.         except KeyError:
  49.             pass
  50.         except IndexError:
  51.             raise StopIteration
  52.  
  53.         return action((string, idx + 1), context)
  54.         m = scanner(string, idx).match()
  55.         if m is None or m.end() == idx:
  56.             raise StopIteration
  57.         
  58.         return actions[m.lastindex](m, context)
  59.  
  60.     return _scan_once
  61.  
  62.  
  63. def pattern(pattern, flags = FLAGS):
  64.     
  65.     def decorator(fn):
  66.         fn.pattern = pattern
  67.         fn.regex = re.compile(pattern, flags)
  68.         return fn
  69.  
  70.     return decorator
  71.  
  72.